package cz.vse.adventura.po1715.xkosd00_kostka.hra;

import  cz.pecinovsky.english.pojj.adv_framework.game_txt.IPlace;

import java.util.Collection;
import static cz.vse.adventura.po1715.xkosd00_kostka.hra.Texty.*;

/*******************************************************************************
 * Instance třídy {@code PrikazJdi} představuje příkaz
 * k přesunu z aktuální mistosti do zadané místnosti. Aby byl příkaz proveden,
 * musí byt zadaná místnost z aktuální místnosti dosažitelná.
 *
 * @author    Dominik KOSTKA
 * @version   1.0
 */
public class PrikazJdi extends APrikaz
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     *
     */
    public PrikazJdi()
    {
        super( pJDI, //"Jdi",
               "Přesune hráče do zadané místnosti.\n" +
               "Tato místnost musí být dostupná z aktuální místnosti." );
    }



//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================

    /***************************************************************************
     * Přesune hráče do zadané cílové místnosti;
     * před tím však zkontroluje, zda byla zadána cílová místnost a
     * zda je do ní možno se v daném okamžiku z aktuální místnosti přesunout.
     *
     * @param parametry Mistnost, kam se hráč chce přesunout
     * @return Text zpravy vypsane po provedeni prikazu
     */
    @Override
    public String execute( String... parametry )
    {
        if (parametry.length == 0) return zCIL_NEZADAN;
        
        Mistnost am = Mistnost.getAktuálníMístnost();
        Mistnost cil = Mistnost.getMístnost(parametry[0]);
        Collection<? extends IPlace> sousedé = am.getNeighbors();

        if ((cil == null)  ||  (! sousedé.contains(cil))){
            return zNENÍ_CIL;           //==========>
        }

        if(am == Mistnost.Zkratka && (cil == Mistnost.Koupelna1 ||
           cil == Mistnost.Koupelna2)){
           Mistnost koupelna1 = Mistnost.getMístnost(KOUPELNA1);
           Mistnost koupelna2 = Mistnost.getMístnost(KOUPELNA2);
           Predmet mýdlo = new Predmet(MÝDLO);
           Predmet toaletníPapír = new Predmet(TOALETNÍ_PAPÍR);
           koupelna1.poloz(toaletníPapír);
           koupelna2.poloz(mýdlo);
           Mistnost.setAktuálníMístnost(cil);
           Hra.getHra().stop();
           return VÝHRA;
        }
        
        if(cil == Mistnost.Výtah && !Stav.registrován) return NEREGISTROVÁNO;
        
        if((am == Mistnost.Patro1 && !Stav.světla1Svítí) ||
           (am == Mistnost.Patro2 && !Stav.světla2Svítí)) return JE_TMA;
        
        Mistnost.setAktuálníMístnost(cil);
        
        return zPŘESUN + cil;
    }

//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== INTERNÍ DATOVÉ TYPY =======================================================
//== TESTOVACÍ METODY A TŘÍDY ==================================================
//
//    /***************************************************************************
//     * Testovací metoda.
//     */
//    public static void test()
//    {
//        PrikazJdi inst = new PrikazJdi();
//    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )  {  test();  }
}
